import logging
import colorlog

# 创建日志格式器，使用 colorlog 的 ColoredFormatter
formatter = colorlog.ColoredFormatter(
    '%(log_color)s%(asctime)s %(levelname)-8s %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    reset=True,  # 在日志后重置颜色
    log_colors={
        'DEBUG': 'cyan',        # 调试信息为青色
        'INFO': 'green',        # 信息为绿色
        'WARNING': 'yellow',    # 警告为黄色
        'ERROR': 'red',         # 错误为红色
        'CRITICAL': 'bold_red'  # 严重错误为粗体红色
    }
)

# 创建控制台处理器，设置日志级别为 INFO
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 控制台输出 INFO 级别及以上
console_handler.setFormatter(formatter)

# 创建文件处理器，设置日志级别为 DEBUG
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)  # 文件输出 DEBUG 级别及以上
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s %(message)s'))

# 获取 root logger 并设置日志级别为 DEBUG
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 添加控制台和文件处理器
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 打印不同级别的日志信息
logger.debug('这是调试信息')    # 仅会写入文件
logger.info('这是信息')       # 同时输出到控制台和文件
logger.warning('这是警告')     # 同时输出到控制台和文件
logger.error('这是错误')       # 同时输出到控制台和文件
logger.critical('这是严重错误')  # 同时输出到控制台和文件
